home *** CD-ROM | disk | FTP | other *** search
/ Turnbull China Bikeride / Turnbull China Bikeride - Disc 2.iso / STUTTGART / FROMUTS / CDUNGEON / !CDUNGEON / c / DSO4 < prev    next >
Text File  |  1991-05-20  |  4KB  |  200 lines

  1. /* ROBADV-- STEAL WINNER'S VALUABLES */
  2.  
  3. /*COPYRIGHT 1980, INFOCOM COMPUTERS AND COMMUNICATIONS, CAMBRIDGE MA. 02142*/
  4. /* ALL RIGHTS RESERVED, COMMERCIAL USAGE STRICTLY PROHIBITED */
  5. /* WRITTEN BY R. M. SUPNIK */
  6.  
  7. #include "funcs.h"
  8. #include "vars.h"
  9.  
  10. integer robadv_(adv, nr, nc, na)
  11. integer adv;
  12. integer nr;
  13. integer nc;
  14. integer na;
  15. {
  16.     /* System generated locals */
  17.     integer ret_val, i__1;
  18.  
  19.     /* Local variables */
  20.     integer i;
  21.  
  22.     ret_val = 0;
  23. /*                         !COUNT OBJECTS */
  24.     i__1 = objcts_1.olnt;
  25.     for (i = 1; i <= i__1; ++i) {
  26.     if (objcts_1.oadv[i - 1] != adv || objcts_1.otval[i - 1] <= 0 || (
  27.         objcts_1.oflag2[i - 1] & SCRDBT) != 0) {
  28.         goto L100;
  29.     }
  30.     newsta_(i, 0, nr, nc, na);
  31. /*                         !STEAL OBJECT */
  32.     ++ret_val;
  33. L100:
  34.     ;
  35.     }
  36.     return ret_val;
  37. } /* robadv_ */
  38.  
  39. /* ROBRM-- STEAL ROOM VALUABLES */
  40.  
  41. /* DECLARATIONS */
  42.  
  43. integer robrm_(rm, pr, nr, nc, na)
  44. integer rm;
  45. integer pr;
  46. integer nr;
  47. integer nc;
  48. integer na;
  49. {
  50.     /* System generated locals */
  51.     integer ret_val, i__1, i__2;
  52.  
  53.     /* Local variables */
  54.     integer i;
  55.  
  56.  
  57. /* OBJECTS */
  58.  
  59.  
  60.  
  61.  
  62.     ret_val = 0;
  63. /*                         !COUNT OBJECTS */
  64.     i__1 = objcts_1.olnt;
  65.     for (i = 1; i <= i__1; ++i) {
  66. /*                         !LOOP ON OBJECTS. */
  67.     if (! qhere_(i, rm)) {
  68.         goto L100;
  69.     }
  70.     if (objcts_1.otval[i - 1] <= 0 || (objcts_1.oflag2[i - 1] & 
  71.         SCRDBT) != 0 || (objcts_1.oflag1[i - 1] & 
  72.         VISIBT) == 0 || ! prob_(pr, pr)) {
  73.         goto L50;
  74.     }
  75.     newsta_(i, 0, nr, nc, na);
  76.     ++ret_val;
  77.     objcts_1.oflag2[i - 1] |= TCHBT;
  78.     goto L100;
  79. L50:
  80.     if ((objcts_1.oflag2[i - 1] & ACTRBT) != 0) {
  81.         i__2 = oactor_(i);
  82.         ret_val += robadv_(i__2, nr, nc, na);
  83.     }
  84. L100:
  85.     ;
  86.     }
  87.     return ret_val;
  88. } /* robrm_ */
  89.  
  90. /* WINNIN-- SEE IF VILLAIN IS WINNING */
  91.  
  92. /* DECLARATIONS */
  93.  
  94. logical winnin_(vl, hr)
  95. integer vl;
  96. integer hr;
  97. {
  98.     /* System generated locals */
  99.     logical ret_val;
  100.  
  101.     /* Local variables */
  102.     integer ps, vs;
  103.  
  104.  
  105. /* OBJECTS */
  106.  
  107.  
  108.  
  109.     vs = objcts_1.ocapac[vl - 1];
  110. /*                         !VILLAIN STRENGTH */
  111.     ps = vs - fights_(hr, 1);
  112. /*                         !HIS MARGIN OVER HERO */
  113.     ret_val = prob_(90, 100);
  114.     if (ps > 3) {
  115.     return ret_val;
  116.     }
  117. /*                         !+3... 90% WINNING */
  118.     ret_val = prob_(75, 85);
  119.     if (ps > 0) {
  120.     return ret_val;
  121.     }
  122. /*                         !>0... 75% WINNING */
  123.     ret_val = prob_(50, 30);
  124.     if (ps == 0) {
  125.     return ret_val;
  126.     }
  127. /*                         !=0... 50% WINNING */
  128.     ret_val = prob_(25, 25);
  129.     if (vs > 1) {
  130.     return ret_val;
  131.     }
  132. /*                         !ANY VILLAIN STRENGTH. */
  133.     ret_val = prob_(10, 0);
  134.     return ret_val;
  135. } /* winnin_ */
  136.  
  137. /* FIGHTS-- COMPUTE FIGHT STRENGTH */
  138.  
  139. /* DECLARATIONS */
  140.  
  141. integer fights_(h, flg)
  142. integer h;
  143. logical flg;
  144. {
  145.     /* Initialized data */
  146.  
  147.     const integer smin = 2;
  148.     const integer smax = 7;
  149.  
  150.     /* System generated locals */
  151.     integer ret_val;
  152.  
  153.     ret_val = smin + ((smax - smin) * advs_1.ascore[h - 1] + state_1.mxscor /
  154.          2) / state_1.mxscor;
  155.     if (flg) {
  156.     ret_val += advs_1.astren[h - 1];
  157.     }
  158.     return ret_val;
  159. } /* fights_ */
  160.  
  161. /* VILSTR-    COMPUTE VILLAIN STRENGTH */
  162.  
  163. /* DECLARATIONS */
  164.  
  165. integer vilstr_(v)
  166. integer v;
  167. {
  168.     /* System generated locals */
  169.     integer ret_val, i__1, i__2, i__3;
  170.  
  171.     /* Local variables */
  172.     integer i;
  173.  
  174.     ret_val = objcts_1.ocapac[v - 1];
  175.     if (ret_val <= 0) {
  176.     return ret_val;
  177.     }
  178.     if (v != oindex_1.thief || ! findex_1.thfenf) {
  179.     goto L100;
  180.     }
  181.     findex_1.thfenf = FALSE_;
  182. /*                         !THIEF UNENGROSSED. */
  183.     ret_val = min(ret_val,2);
  184. /*                         !NO BETTER THAN 2. */
  185.  
  186. L100:
  187.     i__1 = vill_1.vlnt;
  188.     for (i = 1; i <= i__1; ++i) {
  189. /*                         !SEE IF  BEST WEAPON. */
  190.     if (vill_1.villns[i - 1] == v && prsvec_1.prsi == vill_1.vbest[i - 1]
  191.         ) {
  192. /* Computing MAX */
  193.         i__2 = 1, i__3 = ret_val - 1;
  194.         ret_val = max(i__2,i__3);
  195.     }
  196. /* L200: */
  197.     }
  198.     return ret_val;
  199. } /* vilstr_ */
  200.